/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entites;

import Controleur.Corps;
import Controleur.Esprit;
import Controleur.Esprit.SexeType;
import Controleur.Interaction;
import Controleur.Interaction.ActionType;
import java.util.ArrayList;

/**
 *
 * @author Raphaël
 */
public abstract class Espece {

    private Corps unCorps;
    private Esprit unEsprit;
    private ArrayList<String> caracteristiques = new ArrayList<>();
    private Interaction interEspece;

    public Espece() {
        this.unCorps = new Corps();
        this.unEsprit = new Esprit();
    }

    public Espece(Corps corps, Esprit esprit) {
        this.unCorps = corps;
        this.unEsprit = esprit;
    }

    public Corps getUnCorps() {
        return unCorps;
    }

    public Esprit getUnEsprit() {
        return unEsprit;
    }

    // Accès rapide aux caractéristiques du corps
    public int getFaim() {
        return unCorps.getFaim();
    }

    public int getFitness() {
        return unCorps.getFitness();
    }

    public int getForce() {
        return unCorps.getForce();
    }

    public int getPoids() {
        return unCorps.getPoids();
    }

    public int getResistancePhysique() {
        return unCorps.getResistancePhysique();
    }

    public int getSoif() {
        return unCorps.getSoif();
    }

    public int getTaille() {
        return unCorps.getTaille();
    }

    public int getDureeVie() {
        return unCorps.getDureeVie();
    }

    public int getVieInitiale() {
        return unCorps.getVieInitiale();
    }

    //Accès rapide aux caractéristiques de l'esprit
    public int getAgressivite() {
        return unEsprit.getAgressivite();
    }

    public int getHumeur() {
        return unEsprit.getHumeur();
    }

    public int getNegociation() {
        return unEsprit.getNegociation();
    }

    public String getNom() {
        return unEsprit.getNom();
    }

    public int getPatience() {
        return unEsprit.getPatience();
    }

    public SexeType getSexe() {
        return unEsprit.getSexe();
    }

    public void setUnCorps(Corps unCorps) {
        this.unCorps = unCorps;
    }

    public void setUnEsprit(Esprit unEsprit) {
        this.unEsprit = unEsprit;
    }

    public Espece genererEspece() {
        unCorps = new Corps();
        unEsprit = new Esprit();
        return this;
    }

    public void afficheEspece() {
        unCorps.afficheToutCorps();
        unEsprit.afficheToutEsprit();
    }

    public ArrayList getAll() {
        caracteristiques.clear();
        caracteristiques.add(getNom());
        caracteristiques.add(getSexe().toString());
        caracteristiques.add(Integer.toString(getAgressivite()));
        caracteristiques.add(Integer.toString(getHumeur()));
        caracteristiques.add(Integer.toString(getNegociation()));
        caracteristiques.add(Integer.toString(getPatience()));
        caracteristiques.add(Integer.toString(getFaim()));
        caracteristiques.add(Integer.toString(getFitness()));
        caracteristiques.add(Integer.toString(getForce()));
        caracteristiques.add(Integer.toString(getPoids()));
        caracteristiques.add(Integer.toString(getResistancePhysique()));
        caracteristiques.add(Integer.toString(getSoif()));
        caracteristiques.add(Integer.toString(getTaille()));
        caracteristiques.add(Integer.toString(getDureeVie()));
        caracteristiques.add(Integer.toString(getVieInitiale()));
        return caracteristiques;
    }

    public void veillirEspece() {
        unCorps.villirCorps();
    }

    public void collisionEspece(Espece especeUn, Espece especeDeux) {
        interEspece = new Interaction(especeUn, especeDeux);
        interEspece.action();
        if (interEspece.getAction() == ActionType.Combat) {
            interEspece.getVainqueur();
            interEspece.getPerdant();
        } else {
            interEspece.getNouveauNe();
        }
    }

    @Override
    public abstract String toString();
}
